home *** CD-ROM | disk | FTP | other *** search
- /************************************************************************************************/
- /* */
- /* Program Name: Stiletto */
- /* */
- /* File Name: Preferences.c */
- /* */
- /* © Apple Computer, Inc. 1991-1995 */
- /* All Rights Reserved */
- /* */
- /* Revision History: */
- /* */
- /* Date Who Modification */
- /* */
- /* 1991-06-30 Chris Halim Original version */
- /* 1995-06-26 Jaakko Railo Version 2.0 */
- /* */
- /************************************************************************************************/
-
- /****************************************** DESCRIPTION ******************************************
-
- *************************************************************************************************/
-
- /******************************************** HEADERS *******************************************/
-
- #include "Aliases.h"
- #include "Resources.h"
- #include "Script.h"
- #include "TextUtils.h"
-
- #include "Constants.h"
- #include "LogWindow.h"
- #include "Preferences.h"
- #include "Utilities.h"
-
- /****************************************** DEFINITIONS *****************************************/
-
- /****************************************** PROTOTYPES ******************************************/
-
- void CopyResource (short sourceFile, short targetFile, ResType theType, short resID);
- short OpenPrefFile (SignedByte permission);
-
- /******************************************** GLOBALS *******************************************/
-
- extern LogWindowPtr gLogWindow;
-
- /************************************************************************************************/
- /************************************************************************************************/
-
-
- #pragma segment Utilities
- StringHandle GetSTRFromPref (short resID)
- {
- short refNum;
- short savedResRef;
- StringHandle tString = nil;
-
- refNum = OpenPrefFile (fsRdPerm);
- if (refNum != (-1)) {
- savedResRef = CurResFile ();
- UseResFile (refNum);
-
- tString = GetString (resID);
- DetachResource ((Handle) tString);
-
- UseResFile (savedResRef);
- CloseResFile (refNum);
- }
-
- return (tString);
- }
-
-
- #pragma segment Utilities
- void GetWinLocFromPref (Rect * theWindowRect, short rectResID)
- {
- short refNum;
- short savedResRef;
-
- refNum = OpenPrefFile (fsRdPerm);
- if (refNum != (-1)) {
- savedResRef = CurResFile ();
- UseResFile (refNum);
-
- SetRectFromResource (theWindowRect, rectResID);
-
- UseResFile (savedResRef);
- CloseResFile (refNum);
- }
- }
-
-
- #pragma segment Utilities
- void SaveWinLocToPref (WindowPtr theWindow, short rectResID)
- {
- short refNum;
- short savedResRef;
- Rect **rectHandle;
-
- refNum = OpenPrefFile (fsRdWrPerm);
- if (refNum != (-1)) {
-
- savedResRef = CurResFile ();
- UseResFile (refNum);
-
- if (rectHandle = (Rect **) Get1Resource ('RECT', rectResID))
- {
- **rectHandle = (**((WindowPeek) theWindow)->contRgn).rgnBBox;
- ChangedResource ((Handle) rectHandle);
- if (ResError() != noErr)
- PutLine (gLogWindow, "### ChangedResource failed : %d", ResError());
- }
-
- UseResFile (savedResRef);
- CloseResFile (refNum);
- }
- }
-
-
- #pragma segment Utilities
- void AddToPrefFile (Handle thePref, ResType theType, short resID, ConstStr255Param resName)
- {
- OSErr errCode;
- short refNum;
- short savedResRef;
-
- refNum = OpenPrefFile (fsRdWrPerm);
- if (refNum != (-1)) {
-
- savedResRef = CurResFile ();
- UseResFile (refNum);
-
- if ((errCode = HandToHand (&thePref)) != noErr)
- PutLine (gLogWindow, "### HandToHand failed : %d", errCode);
-
- if (thePref)
- {
- AddResource (thePref, theType, resID, resName);
-
- ChangedResource (thePref);
- if (ResError() != noErr)
- PutLine (gLogWindow, "### ChangedResource failed : %d", ResError());
- }
-
- UseResFile (savedResRef);
- CloseResFile (refNum);
- }
- }
-
-
- #pragma segment Utilities
- void SaveToPrefFile (Handle thePref, ResType theType, short resID)
- {
- short refNum;
- short savedResRef;
- Handle tempHandle;
- OSErr errCode;
-
- refNum = OpenPrefFile (fsRdWrPerm);
- if (refNum != (-1)) {
-
- savedResRef = CurResFile ();
- UseResFile (refNum);
-
- if (tempHandle = Get1Resource (theType, resID))
- {
- RmveResource (tempHandle);
- DisposHandle (tempHandle);
- }
-
- if ((errCode = HandToHand (&thePref)) == noErr)
- {
- AddResource (thePref, theType, resID, "\p");
-
- ChangedResource (thePref);
- if (ResError() != noErr)
- PutLine (gLogWindow, "### ChangedResource failed : %d", ResError());
- }
- else
- PutLine (gLogWindow, "### HandToHand failed : %d", errCode);
-
- UseResFile (savedResRef);
- CloseResFile (refNum);
- }
- }
-
-
- #pragma segment Utilities
- Handle GetFromPrefFile (ResType theType, short resID)
- {
- short refNum;
- short savedResRef;
- Handle tempHandle;
-
- refNum = OpenPrefFile (fsRdPerm);
- if (refNum != (-1)) {
-
- savedResRef = CurResFile ();
- UseResFile (refNum);
-
- if (tempHandle = Get1Resource (theType, resID))
- DetachResource (tempHandle);
-
- UseResFile (savedResRef);
- CloseResFile (refNum);
- }
-
- return (tempHandle);
- }
-
-
- #pragma segment Utilities
- void CopyResource (short sourceFile, short targetFile, ResType theType, short resID)
- {
- Handle tHandle;
- Str255 resName;
- short savedResRef = CurResFile ();
-
- UseResFile (sourceFile);
- if (tHandle = Get1Resource (theType, resID))
- {
- GetResInfo (tHandle, &resID, &theType, resName);
- DetachResource (tHandle);
-
- UseResFile (targetFile);
- AddResource (tHandle, theType, resID, resName);
- }
-
- UseResFile (savedResRef);
- }
-
-
- #pragma segment Utilities
- short OpenPrefFile (SignedByte permission)
- {
- OSErr errCode;
- short vRefNum, refNum;
- long dirID;
- FSSpec thePrefFile;
- short savedResRef = CurResFile ();
- Str255 fileName;
- Boolean targetIsFolder, wasAliased;
-
- errCode = FindFolder (kOnSystemDisk, kPreferencesFolderType, kCreateFolder, &vRefNum, &dirID);
- if (errCode != noErr) {
- PutLine (gLogWindow, "### FindFolder failed : %d", errCode);
- return (-1);
- }
-
- GetIndString(fileName, rCommonSTR, kPrefNameInd);
-
- FSMakeFSSpec (vRefNum, dirID, fileName, &thePrefFile);
-
- errCode = ResolveAliasFile (&thePrefFile, true, &targetIsFolder, &wasAliased);
-
- refNum = FSpOpenResFile (&thePrefFile, permission);
- if (refNum == (-1)) {
- if (ResError () == fnfErr) {
- FSpCreateResFile (&thePrefFile, '\?\?\?\?', 'pref', smSystemScript);
- refNum = FSpOpenResFile (&thePrefFile, fsRdWrPerm);
-
- CopyResource (savedResRef, refNum, 'RECT', rLogWindRECT);
- CopyResource (savedResRef, refNum, 'RECT', rTelWindRECT);
- CopyResource (savedResRef, refNum, 'RECT', rModuleWindRECT);
-
- CopyResource (savedResRef, refNum, 'STR ', rPrefSTR);
-
- CopyResource (savedResRef, refNum, 'STR ', rDefaultToolSTR);
-
- CopyResource (savedResRef, refNum, 'vers', 1);
-
- UpdateResFile (refNum);
- CloseResFile (refNum);
- refNum = FSpOpenResFile (&thePrefFile, permission);
- }
- else {
- AlertUser ("\pCan't open the pref file !", ResError());
- return (-1);
- }
- }
-
- return (refNum);
- }
-
-
-